User Roles এবং Permissions Management

Computer Programming - নোড জেএস (Node.js) - Authentication এবং Authorization (অথেনটিকেশন এবং অথরাইজেশন)
182

User Roles এবং Permissions Management হল যে কোনো অ্যাপ্লিকেশনে নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল ব্যবস্থাপনার অন্যতম গুরুত্বপূর্ণ দিক। এটি ডিফাইন করে যে, প্রতিটি ব্যবহারকারী কী ধরনের অ্যাক্সেস পাবে, তারা কোন ফিচার বা ডাটা দেখতে বা সম্পাদনা করতে পারবে এবং কোথায় তারা সীমাবদ্ধ থাকবে।

Node.js এ User Roles এবং Permissions ম্যানেজমেন্ট বাস্তবায়ন করার জন্য, সাধারণত একটি role-based access control (RBAC) সিস্টেম ব্যবহার করা হয়। এই সিস্টেমে, ব্যবহারকারীদের একটি নির্দিষ্ট role দেওয়া হয় এবং সেই role এর অধীনে ব্যবহারকারীকে নির্দিষ্ট permissions প্রদান করা হয়।

এখানে User Roles এবং Permissions Management এর ধারণা, কিভাবে একে Node.js এ বাস্তবায়ন করা যায় এবং এর জন্য ব্যবহৃত বিভিন্ন পদ্ধতি নিয়ে আলোচনা করা হবে।


১. User Roles এবং Permissions ধারণা

User Role:

  • একটি role হল ব্যবহারকারীর অবস্থান বা ভূমিকা, যা তার অ্যাপ্লিকেশনের ভেতরে কী কাজ করতে পারবে তা নির্ধারণ করে।
  • উদাহরণস্বরূপ: Admin, User, Moderator, Guest ইত্যাদি।

Permissions:

  • Permissions হল সেই কার্যকলাপ বা অ্যাক্সেস যা একটি নির্দিষ্ট role বা ব্যবহারকারীকে দেওয়া হয়। এটি নির্ধারণ করে, ব্যবহারকারী কোন ফিচারে অ্যাক্সেস পাবে, কোন ডাটাবেস রেকর্ড দেখতে বা সম্পাদনা করতে পারবে, ইত্যাদি।
  • উদাহরণস্বরূপ: Create, Read, Update, Delete (CRUD), Manage users, View reports, ইত্যাদি।

RBAC (Role-Based Access Control):

  • RBAC এর মাধ্যমে ব্যবহারকারীদের roles এবং তাদের অধীনে থাকা permissions ম্যানেজ করা হয়।
  • প্রতিটি role একটি নির্দিষ্ট set of permissions এর সাথে যুক্ত থাকে।

২. Node.js এ User Roles এবং Permissions ম্যানেজমেন্ট বাস্তবায়ন

Node.js এ user roles এবং permissions ম্যানেজমেন্ট করার জন্য সাধারণত Express.js এবং jsonwebtoken (JWT) এর মাধ্যমে authentication এবং authorization বাস্তবায়ন করা হয়। নিচে একটি সাধারণ RBAC (Role-Based Access Control) সিস্টেমের উদাহরণ দেওয়া হলো, যেখানে Admin এবং User roles থাকবে এবং তাদের জন্য আলাদা permissions থাকবে।

Step 1: Dependencies ইনস্টল করা

প্রথমে express, jsonwebtoken (JWT) এবং bcryptjs (password hashing এর জন্য) ইনস্টল করুন।

npm install express jsonwebtoken bcryptjs

Step 2: Basic User Authentication (JWT) Setup

প্রথমে একটি মৌলিক ব্যবহারকারী অথেনটিকেশন সিস্টেম তৈরি করি যেখানে JWT token ব্যবহার করা হবে।

const express = require('express');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const app = express();

app.use(express.json());

// Dummy users for demonstration
const users = [
    { id: 1, username: 'admin', password: 'admin123', role: 'admin' },
    { id: 2, username: 'user', password: 'user123', role: 'user' }
];

// JWT secret key
const JWT_SECRET = 'your_jwt_secret_key';

// User login and JWT token generation
app.post('/login', (req, res) => {
    const { username, password } = req.body;
    const user = users.find(u => u.username === username);

    if (!user) {
        return res.status(400).send('User not found');
    }

    // Compare hashed password
    bcrypt.compare(password, user.password, (err, result) => {
        if (err) return res.status(500).send('Server error');
        if (!result) return res.status(400).send('Invalid password');

        // Generate JWT token
        const token = jwt.sign({ id: user.id, role: user.role }, JWT_SECRET, { expiresIn: '1h' });
        res.json({ token });
    });
});

Step 3: Protecting Routes with Role-Based Access Control (RBAC)

এখন, Authorization যুক্ত করি, যাতে আমরা ব্যবহারকারীর role অনুসারে তাদের অ্যাক্সেস সীমাবদ্ধ করতে পারি।

// Middleware to verify JWT token and role
function authenticateToken(req, res, next) {
    const token = req.header('Authorization');
    if (!token) {
        return res.status(401).send('Access denied');
    }

    jwt.verify(token, JWT_SECRET, (err, user) => {
        if (err) return res.status(403).send('Invalid token');
        req.user = user;
        next();
    });
}

// Middleware to check if the user has admin role
function authorizeAdmin(req, res, next) {
    if (req.user.role !== 'admin') {
        return res.status(403).send('Access denied');
    }
    next();
}

// Example of an admin-only route
app.get('/admin', authenticateToken, authorizeAdmin, (req, res) => {
    res.send('Welcome, Admin');
});

// Example of a user route that is accessible by both admin and user
app.get('/profile', authenticateToken, (req, res) => {
    res.send('Welcome, User');
});

Step 4: Hashing Passwords with bcrypt

তবে, বাস্তবে, আপনি কখনও plaintext password সঞ্চয় করবেন না। বরং, ব্যবহারকারীর পাসওয়ার্ডগুলি bcrypt এর মাধ্যমে হ্যাশ করা উচিত।

// Hash the password before saving it to the database
bcrypt.hash('admin123', 10, (err, hashedPassword) => {
    if (err) throw err;
    // Save hashedPassword in database
});

Step 5: Testing Routes

এখন, আপনার /login রুটে লগ ইন করতে পারবেন এবং JWT token পাবেন। সেই token দিয়ে /admin বা /profile রুটে অ্যাক্সেস করতে পারবেন।

  • /admin রুটটি শুধুমাত্র admin role এর জন্য অ্যাক্সেসযোগ্য।
  • /profile রুটটি admin এবং user উভয়ের জন্য অ্যাক্সেসযোগ্য।

৩. User Roles এবং Permissions ব্যবহার করার অন্য কিছু পদ্ধতি

  1. Middleware ব্যবহার করে Permission Check:
    আপনি যদি আরও অনেক রোল এবং পেরমিশন চান, তবে role এবং permissions গুলি ডাটাবেসে সংরক্ষণ করতে পারেন এবং রুটে middleware ব্যবহার করে সেই রোল/পেরমিশন যাচাই করতে পারেন।
  2. Permission-based Access:
    • উদাহরণস্বরূপ, create, read, update, এবং delete (CRUD) operations অ্যাডমিন, মডারেটর বা সাধারণ ব্যবহারকারীর জন্য আলাদা আলাদা permission দিয়ে সীমাবদ্ধ করতে পারেন।
  3. Dynamic Role Management:
    আপনি ডাটাবেসে roles এবং permissions টেবিল তৈরি করে ডাইনামিকভাবে user roles এবং permissions ম্যানেজ করতে পারেন। এর মাধ্যমে আপনি admin থেকে user পর্যন্ত roles ডাইনামিকভাবে তৈরি করতে পারবেন।

সারাংশ

  • User Roles এবং Permissions ম্যানেজমেন্ট ব্যবহারকারীদের বিভিন্ন অ্যাক্সেস নিয়ন্ত্রণ করতে সাহায্য করে।
  • Role-Based Access Control (RBAC) পদ্ধতির মাধ্যমে নির্দিষ্ট ব্যবহারকারীদের নির্দিষ্ট রোল ও পেরমিশন প্রদান করা হয়।
  • JWT (JSON Web Token) ব্যবহার করে authentication এবং authorization করতে পারা যায়।
  • Node.js এবং Express ব্যবহার করে middleware এর মাধ্যমে সহজেই role validation এবং permission management করা সম্ভব।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...